home *** CD-ROM | disk | FTP | other *** search
/ Tech Win 1999 February / TECH Win 02-1999 Disc A.iso / ols / lzh / ws101.lzh / WS.TXT < prev   
Encoding:
Text File  |  1998-11-11  |  18.7 KB  |  480 lines

  1.                  高速リアルタイム スペクトラムアナライザー
  2.  
  3.                     WaveSpectra  for Windows95/98/NT4
  4.  
  5.                             ( 旧 WinSpectra )
  6.            ※ 同名のソフトが存在(海外)したため名前を変更しました。
  7.  
  8. ---------------------------------------------------------------------------
  9.  
  10. 【はじめに】
  11.  
  12.   この WaveSpectra は、サウンドカードや、Waveファイルを入力とする音声信号を
  13. FFT(高速フーリエ変換)して、リアルタイムにそのパワースペクトラムを表示する
  14. ツールです。
  15.  
  16. 以前からスペクトラム表示ソフトは作っていたのですが、最近のパソコンの性能の
  17. 向上はめざましいので、リアルタイムに高速表示するものを作ってみました。
  18.  
  19. できるだけ高速に動くように作りましたので、CPUやディスプレイカードの性能、
  20. および表示サイズにもよりますが、最近の標準以上の機械では毎秒数十フレーム
  21. の表示更新速度がえられ、充分パソコンをスペアナとして使用することが
  22. できます。
  23.  
  24.  (例1) 28フレーム/秒  4096点 FFT、画面サイズ:起動直後のデフォールトサイズ
  25.                        AMD K6-200MHz, Canopus PWR128P 65k色
  26.  (例2) 17フレーム/秒  4096点 FFT、画面サイズ:起動直後のデフォールトサイズ
  27.                        Note: MMX Pentium 133MHz, Chips&Tech 65554 256色
  28.  
  29.     ※ 20フレーム/秒 程度の速度が得られれば、ほぼ入力の変化に
  30.        リアルタイムに追従して見えます。
  31.  
  32.     ※ 最近の高速マシンをお持ちの方は、もっと高速表示できます!
  33.  
  34.     ※ DirectDraw 必須。
  35.  
  36.  
  37. また、サウンドデバイスから入力するときには同時にファイルへ録音することも
  38. 出来ます。
  39.  
  40. あまり難しいことを考えずにとりあえず Waveファイル演奏用のプレーヤーとして
  41. 使ってみて下さい。
  42. 音楽のスペクトルの変化を見ているだけでもなかなか楽しいものです。
  43.  
  44.  
  45. ---------------------------------------------------------------------------
  46.  
  47. 【インストール】
  48.  
  49.   適当なディレクトリに WS.EXE を入れるだけです。
  50.   そして、起動するためのショートカット等、適当に作っておけばそれで終わりです。
  51.   また、使用中も WINDOWS\SYSTEM ディレクトリや、レジストリにも一切書き込み
  52.   しない、行儀の良い?ソフトです(^^)
  53.  
  54.   ただし、ウィンドウ位置や表示条件その他を保存して、次の起動時に
  55.   再現するための WS.INI ファイルを、起動した WS.EXE と同じディレクトリに
  56.   作ります。   (終了時に自動的に作ります。 最初は無くてもかまいません)
  57.  
  58.   ※ この程度のユーティリティにレジストリを汚されるのを作者は好まない(^^;)ので
  59.      推奨はされていませんが?、INI ファイルを使っています。
  60.        (あまりいないでしょうが、マルチユーザー環境の方、ごめんなさい… 
  61.          ま、複数個、別々にディレクトリを作って入れて下さい)
  62.  
  63.   ※ 旧 WinSpectra(WS100.LZH)を既にご使用の方で、今回の WaveSpectra(WS101.LZH)
  64.      を、同じディレクトリへ上書きして使用される方は、出来れば古い WS.INI を
  65.      消去してから使用して下さい。
  66.       (単に、WS.INI ファイル内で使用する名前を少し変更したためだけで、
  67.         古いINIファイルのまま使用しても、なんら不都合はありません)
  68.  
  69.  
  70. 【アンインストール】
  71.  
  72.   ディレクトリごと WS.EXE と WS.INI を消去するだけで終わりです。 
  73.  
  74.  
  75. ---------------------------------------------------------------------------
  76.  
  77. 【使用方法】
  78.  
  79.    ◎Waveファイルの演奏
  80.        Wave ファイルを入力とする時は、「Waveファイルを開く」ボタンを押し、
  81.      ファイルを読み込んだあと、「プレイ」ボタンを押すだけです。
  82.  
  83.       ※ エクスプローラー等からファイルをドラッグ&ドロップしても開くことが
  84.          出来ます。
  85.  
  86.     「ストップ」ボタン、「ポーズ」ボタンは特に説明はいらないでしょう。
  87.  
  88.  (V1.01 から)
  89.       ※ ポーズ中に Wave/Spectrum の各表示ウィンドウへマウスカーソルを移動
  90.          することによって、リードアウト(値の読み出し)が出来ます。
  91.          (詳細は後述の「リードアウト」の項参照)
  92.  
  93.    ◎早送り/巻戻し
  94.        トラックバーの左右の部分をクリックしたり、ノブをドラッグすることで
  95.      任意の位置へ「早送り/巻戻し」することが出来ます。
  96.  
  97.    ◎サウンドデバイスからの入力/録音
  98.       「サウンドデバイスからの入力/録音」ボタンを押すと、サウンドデバイスの入力を
  99.      直接入力信号として使用できます。
  100.      また、後述の「設定」によって、ファイルへの同時書込みをする設定にすると、
  101.      ファイルへ同時録音してWaveファイルを作成することが出来ます。
  102.  
  103.    ◎Lch/Rch切替え
  104.        「Lch/Rch切替え」ボタンで、ステレオ信号の場合の表示するチャンネルを
  105.      切替えることができます。(上がっていれば Lch、押込まれていれば Rch)
  106.  
  107.    ◎終了は、特に専用ボタンは無いので、左上のシステムメニューボタンか
  108.      右上の "閉じる"ボタンで終了して下さい。
  109.  
  110.          ※キーボードの場合は Alt+F4 です。
  111.  
  112. ---------------------------------------------------------------------------
  113.  
  114. 【キーボードによる操作】
  115.  
  116.    ◎各ボタンはキーボードでも操作できます。
  117.  
  118.        Ctrl+O(オー): Waveファイルを開く
  119.        Ctrl+P    : プレイ
  120.        Ctrl+S    : ストップ
  121.        Ctrl+R    : サウンドデバイスからの入力/録音
  122.        Ctrl+L    : Lch/Rch切替え
  123.        Ctrl+T    : 設定
  124.  
  125.        スペース  : Waveファイルがロードされている時は、
  126.                     交互に、プレイ ― ストップと同じ。
  127.  
  128.                     Waveファイルがロードされていない時は、
  129.                     交互に、サウンドデバイスからの入力/録音 ― ストップ
  130.                     と同じ。
  131.  
  132.        Alt+F4    : 終了
  133.  
  134.  
  135. ---------------------------------------------------------------------------
  136.  
  137. 【設定】
  138.  
  139.    ◎最も右側の「設定」ボタンを押すとダイアログボックスが開き、表示やFFT
  140.      その他の設定を変更することができます。
  141.  
  142.    [表示]
  143.  
  144.      === Wave ===
  145.          ●縦軸(Amplitude)
  146.             ・倍率:  Wave波形の振幅データの表示倍率を設定します。
  147.                   x1 の時、最大振幅までのデータを全て表示します。
  148.  
  149.          ●横軸(Time)
  150.             ・倍率:  Wave波形の時間軸の表示倍率を設定します。
  151.                   x1 の時、FFT されているデータ長分を全て表示します。
  152.  
  153.          ●高速表示
  154.                     多少画面がちらついても高速表示したいときチェックします。
  155.                     次項の DirectDraw を併用すると、ちらつかないようにする
  156.                     ことも出来ます。
  157.  
  158.          ●DirectDraw
  159.                     DirectDraw が使用可能で、かつ、"高速表示" をチェック
  160.                     した場合に選択できるようになり、チェックして有効にすると
  161.                     DirectDraw を使用します。
  162.  
  163.               DirectDraw を使うといっても垂直帰線消去期間チェックをするだけ
  164.               ですが、垂直帰線期間を待って一気に画面書込みをするようになる
  165.               ため、ちらつきが無くなるはずですが、表示サイズが大きい場合や
  166.               遅いCPUの場合には、帰線期間中に書ききれずに、ちらつきが残って
  167.               しまう場合も有りますし、それまで待つようになるため、かえって
  168.               遅くなってしまうこともありますので、その場合は 一番高速になる
  169.               組合わせを探してみて下さい。
  170.             また、ドライバによってはソフトウェアエミュレーションの場合も
  171.               あるようで、その場合は効果がありません。
  172.  
  173.      === Spectrum ===
  174.          ●縦軸(Amplitude)
  175.             ◇リニア: Spectrum波形の振幅データをそのまま表示したいときに
  176.                        選択します。
  177.                 ・倍率:  Spectrum波形の振幅データの表示倍率を設定します。
  178.  
  179.             ◇dB:     Spectrum波形の振幅データを dB 表示したいとき選択します。
  180.                 ・レンジ:  dB 表示レンジを選択します。
  181.                                 (80 ~ 120dB)
  182.                 ・シフト:  表示波形をシフトアップする値を選択します。
  183.                                 (6 ~ 18dB)
  184.                             ※原理的に 最大振幅のサイン波のパワースペクトラム
  185.                               は -6dB となること、さらにFFT時に窓関数を
  186.                               かけることで、さらに約-6dBとなるため、その分
  187.                               シフトアップして表示できるようにしてあります。
  188.  
  189.          ●横軸(Frequency)
  190.             ◇リニア: Spectrum波形の周波数軸をそのまま表示したいときに
  191.                        選択します。
  192.                 ・倍率:  Spectrum波形の周波数軸の表示倍率を設定します。
  193.                           x1 の時、全ての周波数成分が表示されます。
  194.                           倍率を上げると、周波数の低い部分のみが拡大表示
  195.                           されていきます。
  196.  
  197.             ◇Log:    Spectrum波形の周波数軸を対数表示したいとき
  198.                        選択します。
  199.  
  200.          ●高速表示
  201.                     多少画面がちらついても高速表示したいときチェックします。
  202.                     DirectDraw が使える時は併用すると、ちらつかないように
  203.                     することも出来ます。
  204.  
  205.          ●DirectDraw
  206.                     DirectDraw が使用可能で、かつ、"高速表示" をチェック
  207.                     した場合に選択できるようになり、チェックして有効にすると
  208.                     DirectDraw を使用します。
  209.  
  210.                ※ === Wave === の同項、参照のこと。
  211.  
  212.  
  213.      === 表示休止時間 ===
  214.               表示間隔を調整します。
  215.               0 の時、フルスピードでFFT計算/表示します。
  216.               このときCPU使用率は、ほぼ100%となります。
  217.                 これでは速すぎて困る時?や、他のソフトのためにCPU使用率を
  218.               下げたい時は、0 以外の値を設定して下さい。
  219.               設定した時間(ms)だけ間隔を開けて計算/表示します。
  220.               (その間CPUは開放されます)
  221.  
  222.             ※ 設定ダイアログの最下に表示中の画面更新レートが表示
  223.                されますので、参考にして下さい。
  224.  
  225.             ※ 20フレーム/秒 程度以上が出ていれば、ほぼ入力にリアルタイムに
  226.            追従して表示されます。
  227.  
  228.             ※ コンボボックスのリスト中の値だけでなく、任意の値を設定する
  229.                ことができます。
  230.  
  231.      === 表示カラー ===
  232.               表示カラーセットを3種類から選択できます。
  233.                 1. 普通のWindows95風表示
  234.                 2. 画面のコピーに適した、白を背景とした表示
  235.                 3. オシロスコープのCRT風の表示
  236.  
  237.  
  238.  
  239.      ※ 以上、全ての表示設定機能は計算/表示中でもリアルタイムに変更できます。
  240.         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  241.  
  242.  
  243.    [FFT]
  244.  
  245.      === サンプルデータ数 ===
  246.               FFT のデータ長です。
  247.               当然多い方が周波数分解能は上がりますが、計算時間は
  248.               多くかかります。
  249.  
  250.              ※ 最少周波数分解能は、サンプリング周波数÷サンプルデータ数
  251.                 です。  (例)44100sample/sec  4096点FFT の場合、10.77Hz
  252.  
  253.              ※ サンプルデータ数は計算/表示中の停止中のみ変更できます。
  254.  
  255.      === 窓関数 ===
  256.               FFT のための窓関数を選択します。
  257.  
  258.              ※窓関数 (Window Function)
  259.               本来は信号が連続しているものとする FFT において、一部分を
  260.               切り出すことによる誤差を減らすための前処理として、データに
  261.               掛け合わせる関数です。
  262.                 (詳しくは関連の専門書をご覧ください)
  263.  
  264.               通常は「ハニング窓」でよいでしょう。
  265.  
  266.  
  267.      ※ 窓関数は計算/表示中でもリアルタイムに変更できます。
  268.         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  269.  
  270.  
  271.    [入力/録音]
  272.  
  273.      === フォーマット ===
  274.               サウンドデバイス入力のフォーマットを設定します。
  275.  
  276.      === 録音モード ===
  277.               「入力/録音ボタン」を押した時の動作を設定します。
  278.  
  279.          ◇サウンドデバイスからの入力のみ
  280.           サウンドデバイスからの直接入力をデータとして計算/表示します。
  281.  
  282.          ◇ファイルへ同時書き込みする
  283.               こちらを選択しておくと、ファイルへ録音しながら計算/表示します。
  284.               「入力/録音ボタン」を押すたびに、出力するファイル名を指定する
  285.               ための、ダイアログボックスが開きます。
  286.  
  287.         ※ 以上は、録音動作中は変更できません。
  288.  
  289.  
  290.   ===========================================================
  291.    ※ 設定ダイアログボックスを閉じる時、ダイアログボックスの
  292.      「キャンセル」ボタンを押して閉じると、それまでの全ての
  293.      設定が、ダイアログボックスを開いた時の状態に戻ります。
  294.      よって、一時的に別の設定にすることができます。
  295.   ===========================================================
  296.  
  297.  
  298.  
  299. ---------------------------------------------------------------------------
  300.  (V1.01 から)
  301.  
  302. 【リードアウト】
  303.  
  304.    ◎ポーズ中にマウスカーソルを Wave/Spectrum 表示ウィンドウへ移動すると、
  305.      マウスカーソルが十字形に変わり、その中心が示す部分の波形の値を読み取る
  306.      ことが出来ます。(小さな表示ウィンドウがカーソルと共に移動します)
  307.  
  308.      ※ このときのマウスカーソルの位置は、横方向(時間軸/周波数軸)だけが
  309.         読み取りに関係します。
  310.         その位置に対するグラフの縦軸の値が読み出されるだけなので、マウス自身
  311.         の縦方向の位置は表示される値とは無関係です。
  312.  
  313.      ※ グラフの表示密度が高くて画面の1ドットに実際には複数のデータが
  314.         対応している場合(Log表示の周波数の高周波の部分など)には、
  315.         上のようにカーソルを合わせただけでは、その内のどれを表示したら
  316.         よいか決定できないので、飛び飛びのデータしか読み取れません。
  317.           ↓このような場合には、次の「自動ピーク検出機能」が役に立ちます。
  318.  
  319.    ●自動ピーク検出機能
  320.  
  321.      マウスカーソルを読み取りたい波形のピーク(頂)やディップ(谷)の近くに
  322.      近づけてから、マウスの左ボタンをクリックすると、自動的にその部分へ
  323.      引き込まれ、その部分の値が表示されます。
  324.      正確にマウスカーソルを合わせる必要が無いので便利です。
  325.  
  326.      また、自動的にその付近のデータ自身のピークやディップの位置を求めて、
  327.      再び逆にその対応するグラフの表示位置へカーソルを移動しているので、
  328.      上記のようにグラフが重なっていて読み取り困難な部分でも、正確に読み取る
  329.      ことが可能です。
  330.  
  331.      ※ ピークの部分を読みたい場合には、それより少し上側へ、
  332.         ディップの部分を読みたい時には、それより少し下側へ、マウスカーソルを
  333.         おいてから左ボタンをクリックするようにすると、ほぼ確実に目的の位置へ
  334.         "引き込ませる"ことが出来ます。
  335.  
  336. ---------------------------------------------------------------------------
  337.  
  338. 【その他】
  339.  
  340.  ◎ 計算/表示の高速化について
  341.       計算を高速化するには、
  342.         1. 高速なCPUに変える(^^;; 
  343.         2. FFTのサンプルデータ数を下げる。
  344.  
  345.       表示を高速化するには、
  346.         1. 高速なディスプレーカードに変える(^^;; 
  347.         2. WaveSpectraの表示サイズを小さくする(^^;;
  348.         3. 多少ちらつくのを我慢して、設定ダイアログで高速表示に
  349.            チェックを付ける。  また、DirectDrawを併用してみる。
  350.         4. 画面の表示モードを 256色等の色数の少ないモードに変更する
  351.             ※これはかなり効きます。 またドライバによっても大分違うようです。
  352.  
  353.    ※ FFT の計算自体はかなり高速(K6-200MHz  4096点で 16.5ms   窓関数や後処理
  354.       を入れても 20数ms)で、実際には全表示更新時間の内かなりの部分を画面表示
  355.       の時間に取られており、ビデオカードの表示能力が結構効いています。
  356.  
  357.  ◎ DirectDrawの使用について
  358.       V1.01 より、Wave, Spectrum へそれぞれ分割したので、様々に組合わせる
  359.       ことで、最適になるように設定することが出来るようになりました。
  360.  
  361.    ※ 表示画面が小さい場合は、全く使用しない方が速い場合もありますし、
  362.       大画面にした場合でも、垂直帰線消去期間を待つので、速い機械の場合は
  363.       2つともチェックすると、かえって遅くなる場合が多いはずです。
  364.       この場合、時間のかかる Spectrum の方だけチェックすると、時間のかからない
  365.       Wave の方も同じ帰線期間中に書き終わってしまうので、最も速い結果が得られ
  366.       るようです。
  367.  
  368.  ◎ スプリットバーについて
  369.       Wave/Spectrum 表示エリア中央のスプリットバーをドラッグすることで
  370.       2つのエリアの比率を変えることが出来ます。
  371.       片方の表示エリアを無くしてしまうことも出来ます。
  372.  
  373.  ◎ 時間その他の表示について
  374.       ・Waveファイルの演奏中は、トラックバーの上部左側へ経過時間、右側に
  375.         そのデータの全演奏時間が表示されます。
  376.  
  377.       ・サウンドデバイスからの入力中は、トラックバーの上部左側へ"赤色"で
  378.         Wave In. と表示されます。
  379.           (「ストップ」ボタンを押すまで入力を続けます)
  380.  
  381.       ・ファイルに書込みながらのサウンドデバイスからの録音中は、
  382.         トラックバーの上部左側へ"赤色"で経過時間、右側には、書き込みドライブの
  383.         書き込み可能な "残り時間" が表示されます。
  384.  
  385.  ◎ サウンドデバイスからの入力時の遅れについて
  386.       サウンドデバイスからの入力時には、先読みしてから処理するWaveファイル
  387.       からの入力と違って、入力バッファにデータが溜まってからでないと処理
  388.       できないため、必ずいくらかの遅れが生じます。
  389.  
  390.      ※ サンプリング周波数が 44100s/s の時にはあまり気にならない程度ですが、
  391.          11025s/s のように低い時や、FFTのサンプル数が多い時はかなり遅れます。
  392.  
  393.  ◎ 8bitのデータについて
  394.       データが8bitの場合、-128 ~ 127 の値を256倍することで16bitのデータ
  395.       と同様に扱って計算/表示しています。
  396.       よって、Wave の振幅の表示も256倍した値でそのまま表示していますので、
  397.       目盛りの表示等は 最大128 ではないので注意してください。
  398.  
  399.       また、Spectrum は、256倍の分(約48dB)だけシフトアップされて表示されます。
  400.  
  401.  ◎ 設定ダイアログを既に開いていて、他のウィンドウの下に隠れている場合
  402.     (メインウィンドウを最大化している時など)は、 再び「設定」ボタンを
  403.     押すと、ダイアログが前面に現れます。
  404.  
  405.  ◎ 表示カラーセットのカスタマイズについて
  406.       ダイアログ等によるカスタマイズは出来ませんが、いまでも取り敢えず
  407.       WS.INI を直接エディタで編集することで、任意の表示カラーにカスタマイズ
  408.       することが出来ます。
  409.       Windowsのカラー表記(16進)ですが、簡単にコメントを付けておいたので
  410.       お分かり頂けると思います。
  411.  
  412.  ◎ おまけ
  413.       テレビの音声などをモニターすると結構面白いです。
  414.       水平同期信号の漏れはもちろんのこと、局によって音声の帯域も違うこと、
  415.       NHK TV の音声はローカル切替制御?のために 10kHz 付近の信号がフィルタ
  416.       されて欠損していること等が良く解ります(^_^)
  417.  
  418.  
  419. ---------------------------------------------------------------------------
  420.  
  421.    ※ このプログラムは  Borland C++ Builder 3  で作成されています。
  422.  
  423.    ※ Windows95/98/NT4 で動作します。
  424.  
  425. ---------------------------------------------------------------------------
  426.  
  427. 【免責】
  428.  
  429.  本プログラムを使用した上でのいかなる損害についても、作者は一切の責任を
  430.  負いません。
  431.  
  432. ---------------------------------------------------------------------------
  433.  
  434. ◎ このプログラムは、フリーソフトウェアです。
  435.  
  436.     著作権は efu にあります。
  437.  
  438.  
  439. ※転載を希望される場合には、必ず先にメールで連絡してください。
  440.   無断での転載はしないでください。
  441.  
  442.  
  443. ご感想、障害の報告、その他、こちらまで宜しくお願いいたします。
  444.  
  445. E-Mail:  efu@mrj.biglobe.ne.jp
  446.  
  447.  
  448. 最新版は、
  449.  
  450. http://member.nifty.ne.jp/efu/
  451.  
  452.   姉妹品、Wave Compare も宜しく(^_^)
  453.  (CD-R のメディアの情報もあります)
  454.  
  455.  
  456.                                               1998.11.11   efu
  457.  
  458. ---------------------------------------------------------------------------
  459.  
  460. WaveSpectra 履歴
  461.  
  462. 98.10.30  V1.00   (WinSpectra)
  463. 98.11.11  V1.01   同名のソフトが存在したため WaveSpectra と名前変更。
  464.                     (Waveシリーズとなって、かえって良いかも(^_^))
  465.                   1.リードアウト(値の読出し)できるようにした。(ポーズ中)
  466.                   2.DirectDraw(V.Blankチェック)の使用を、Wave,Spectrum
  467.                     両方に分割した。
  468.                   3."表示ディレイ"の名称を、"表示休止時間"に変更。
  469.                   4. 2,3 に伴う WS.INI 内の名称変更。
  470.                   5.計算表示中に強制終了した場合に、計算表示スレッドが完全に
  471.                     停止しないうちにメインウィンドウが閉じ、アクセス違反と
  472.                     なることがあったのを修正。
  473.                   6.設定ダイアログを開いたまま終了すると、必ず設定ボタンを
  474.                     押したことになっていたのを、キャンセルしたことになるよう
  475.                     修正。
  476.                   7.バージョン/コピーライト表示を忘れていた(^^;
  477.                   8.その他、細かな修正、変更。
  478.  
  479. ---------------------------------------------------------------------------
  480.